package io.summer.basis.api;

import io.summer.basis.enums.IEnumCode;

/**
 * 1**	信息，服务器收到请求，需要请求者继续执行操作
 * 2**	成功，操作被成功接收并处理
 * 3**	重定向，需要进一步的操作以完成请求
 * 4**	客户端错误，请求包含语法错误或无法完成请求
 * 5**	服务器错误，服务器在处理请求的过程中发生了错误
 */

/**
 * @author Moonlight
 */
public enum ApiCode implements IEnumCode {
  /**
   * 操作成功
   */
  OK(SUCCESS, "成功"),

  /**
   * 服务器错误，服务器在处理请求的过程中发生了错误
   */
  INTERNAL_SERVER_ERROR(SERVER_ERROR, "内部服务器错误"),

  /**
   * 框架一般失败码
   */
  FAILED(FRAME_ERROR, "处理失败"),

  /**
   * 数据访问相关异常
   */
  COMMON_DAO_ERROR(FRAME_ERROR + 1, "数据访问异常"),

  /**
   * 异步调用中主线程不能捕获的异常
   */
  ASYNC_ERROR(FRAME_ERROR + 2, "异步任务未捕获异常"),
  ;
  private final int code;
  private final String message;

  ApiCode(final int code, final String message) {
    this.code = code;
    this.message = message;
  }

  public static ApiCode getApiCode(int code) {
    ApiCode ret = IEnumCode.valueOf(ApiCode.class, code);
    if (ret == null) {
      ret = OK;
    }
    return ret;
  }

  @Override
  public int getCode() {
    return code;
  }

  @Override
  public String getMessage() {
    return message;
  }
}
